% run_analysis.m  
% 一键运行所有分析脚本的主启动文件
% GMCM 2025 神经网络处理器核内调度问题论文数据分析
% 使用说明：在MATLAB中直接运行此脚本即可

clear; clc; close all;

fprintf('=======================================================\n');
fprintf('  GMCM 2025 神经网络处理器核内调度优化算法分析系统  \n');
fprintf('=======================================================\n\n');

% 检查必要文件
fprintf('检查数据文件完整性...\n');

% 检查Conv_Case0日志文件
conv0_log = 'result/Conv_Case0/收敛conv_case0.txt';
if ~exist(conv0_log, 'file')
    error('未找到Conv_Case0日志文件: %s', conv0_log);
end

% 检查其他案例的收敛数据
cases = {'Conv_Case1', 'Matmul_Case0', 'Matmul_Case1', 'FlashAttention_Case0', 'FlashAttention_Case1'};
missing_files = {};

for i = 1:length(cases)
    case_name = cases{i};
    conv_file = sprintf('result/%s/%s_overall_convergence.csv', case_name, case_name);
    summary_file = sprintf('result/%s/%s_summary.txt', case_name, case_name);
    
    if ~exist(conv_file, 'file')
        missing_files{end+1} = conv_file;
    end
    if ~exist(summary_file, 'file')
        missing_files{end+1} = summary_file;
    end
end

if ~isempty(missing_files)
    fprintf('警告：以下文件缺失：\n');
    for i = 1:length(missing_files)
        fprintf('  - %s\n', missing_files{i});
    end
    fprintf('请确保所有案例都已正确运行并生成结果文件。\n\n');
end

fprintf('✓ 数据文件检查完成\n\n');

% 选择分析模式
fprintf('请选择分析模式：\n');
fprintf('  1. 综合分析 (生成2x2组合图表)\n');
fprintf('  2. 单独图表 (生成6个独立的高质量图表) 🌟推荐\n');
fprintf('  3. 全部运行 (同时运行上述两种模式)\n');

choice = input('请输入选择 (1/2/3): ', 's');

try
    switch choice
        case '1'
            fprintf('\n开始运行综合分析...\n');
            analyze_all_cases;
            
            fprintf('\n=== 综合分析完成 ===\n');
            fprintf('生成文件: comprehensive_analysis.png\n');
            
        case '2'
            fprintf('\n开始生成单独图表...\n');
            individual_plots;
            
            fprintf('\n=== 单独图表生成完成 ===\n');
            fprintf('生成6个高质量论文图表，详见控制台输出\n');
            
        case '3'
            fprintf('\n开始运行全部分析...\n');
            fprintf('\n--- 第一步: 综合分析 ---\n');
            analyze_all_cases;
            
            fprintf('\n--- 第二步: 单独图表 ---\n');
            individual_plots;
            
            fprintf('\n=== 全部分析完成 ===\n');
            fprintf('综合分析 + 单独图表 已全部生成\n');
            
        otherwise
            fprintf('无效选择，默认运行单独图表生成...\n');
            individual_plots;
    end
    
    fprintf('\n=======================================================\n');
    fprintf('               🎉 分析完成！🎉                    \n');
    fprintf('=======================================================\n');
    
    % 显示生成的文件
    files = dir('*.png');
    if ~isempty(files)
        fprintf('生成的图表文件：\n');
        for i = 1:length(files)
            fprintf('  📊 %s\n', files(i).name);
        end
    end
    
    reports = dir('*report*.txt');
    if ~isempty(reports)
        fprintf('生成的报告文件：\n');
        for i = 1:length(reports)
            fprintf('  📋 %s\n', reports(i).name);
        end
    end
    
    fprintf('\n💡 使用建议：\n');
    if strcmp(choice, '2') || strcmp(choice, '3')
        fprintf('  📈 单独图表更适合论文使用，分辨率更高\n');
        fprintf('  🎯 推荐使用 plot1 和 plot2 作为主要结果展示\n');
        fprintf('  🔧 推荐使用 plot4 证明算法设计合理性\n');
        fprintf('  📊 推荐使用 plot6 进行综合性能评价\n');
    end
    fprintf('  📝 查看 plot_summary_report.txt 获取详细说明\n');
    fprintf('  🔍 所有图表均可用于论文插图\n\n');
    
catch ME
    fprintf('\n❌ 分析过程中发生错误：\n');
    fprintf('错误信息: %s\n', ME.message);
    if ~isempty(ME.stack)
        fprintf('错误位置: %s (第%d行)\n', ME.stack(1).name, ME.stack(1).line);
    end
    
    fprintf('\n请检查：\n');
    fprintf('  1. 数据文件是否完整\n');
    fprintf('  2. 文件路径是否正确\n');
    fprintf('  3. MATLAB版本是否支持所用函数\n');
end

fprintf('\n论文写作建议：\n');
fprintf('  📝 算法流程图：参考两阶段混合优化架构\n');
fprintf('  📊 实验结果：使用生成的对比图表\n');
fprintf('  📈 性能分析：引用详细报告中的数值\n');
fprintf('  🔍 案例研究：重点分析改进率最高的案例\n\n');
